
//todo
// 假设有k个人质和k个绑匪围成一圈。人质的编号从1到k，绑匪的编号从k+1到2k。
// 从编号1开始，每次从其中选出第m个人(隔m-1选出一人)出列。
// 希望求出m的最小值，使得最先出列的k个人都是绑匪，即都是编号从k+1到2k的人。
#include "iostream"
#include "vector"
#include "unordered_map"
#include "algorithm"

int main() {
//    计算过程：
//    13--------15 ：13除以2等于6，舍去余数1，15乘以2等于30；
//    6---------30 ：6除以2等于3，30乘以2等于60；
//    3---------60 ：3除以2等于1，舍去余数1，60乘以2等于120；
//    1---------120 ：左边数字为1，停止计算。
//    取结果过程：
//    13--------15 ：左边是奇数，取15；
//    6---------30 ：左边是偶数，划去；
//    3---------60 ：取60；
//    1---------120 ：取120；
    int m,n;
    while (std::cin >> m>>n) {
        printf("%d*%d=",m,n);
        int sum=0;
        bool first= true;
        while(m){
            if(m%2==1){
                sum+=n;
                if(!first){
                    printf("+");
                }
                printf("%d",n);
                first=false;
            }
            m/=2;
            n*=2;
        }
        printf("=%d\n",sum);
    }
//    while(1){}
    return 0;
}